package com.wshl.aijiuunion.utils;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.wshl.aijiuunion.App;


/**
 * Created by lst on 2018/4/30.
 * 百度地图定位
 */

public class BdLocationUtil {

    /**
     * 单例
     *
     * @return
     */
    public static BdLocationUtil getInstance() {
        return LocationHolder.INSTANCE;
    }

    private static class LocationHolder {
        private static final BdLocationUtil INSTANCE = new BdLocationUtil();
    }

    private BdLocationUtil() {
    }

    /**
     * 定位回调的接口
     */
    public interface MyLocationListener {
        void myLocation(BDLocation location);
    }

    /**
     * 获取当前位置
     */
    public void requestLocation(final MyLocationListener listener) {
        //声明LocationClient类
        final LocationClient locationClient = new LocationClient(App.getContext());
        // 设置定位条件
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setOpenGps(true);                // 是否打开GPS
        option.setCoorType("bd09ll");           // 设置返回值的坐标类型
        option.setScanSpan(1000);              // 设置定时定位的时间间隔。单位毫秒
        option.setIsNeedAddress(true);          //可选，设置是否需要地址信息，默认不需要
        option.setIgnoreKillProcess(false);
        option.setIsNeedLocationDescribe(true);
        //可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);
        //可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setNeedDeviceDirect(true);        // 返回的定位结果包含手机机头的方向//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        locationClient.setLocOption(option);
        // 注册位置监听器
        locationClient.registerLocationListener(new BDAbstractLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation location) {
                listener.myLocation(location);

                if (location!=null) {
                    locationClient.stop();//如果是单次定位,那么获取到位置之后直接stop就行了
                }

            }
        });
        locationClient.start();
        /*
         * 当所设的整数值大于等于1000（ms）时，定位SDK内部使用定时定位模式。调用requestLocation(
         * )后，每隔设定的时间，定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化，就不会发起网络请求，
         * 返回上一次定位的结果；如果发现位置改变，就进行网络请求进行定位，得到新的定位结果。
         * 定时定位时，调用一次requestLocation，会定时监听到定位结果。
         */
        locationClient.requestLocation();
    }





   /* public static LatLng convertGPSToBaidu(LatLng sourceLatLng) {
        // 将GPS设备采集的原始GPS坐标转换成百度坐标
        CoordinateConverter converter  = new CoordinateConverter();
        converter.from(CoordinateConverter.CoordType.GPS);
        // sourceLatLng待转换坐标
        converter.coord(sourceLatLng);
        LatLng desLatLng = converter.convert();
        return desLatLng;
    }*/

}
